// 节流: n 秒内只运行一次，若在 n 秒内重复触发，只有一次生效
// 节流：就是王者荣耀里英雄的技能，像东皇的大一般都是20s准时来一次。
// 在一段时间内执行一次也就是说如果两次鼠标滚动的时间间隔未到所设置的时间则不执行
function throttle(fn, delay) {
    let timer;
    return function () {
        let _this = this;
        let _args = arguments;
        if (!timer) {
            timer = setTimeout(() => {
                fn.apply(_this, args)
                timer = null
            }, delay);
        }

    }
}

// 使用时间戳
function throttle(func, wait) {
    let preTime = 0;

    return function () {
        let nowTime = +new Date();
        let context = this;
        let args = arguments;

        if (nowTime - preTime > wait) {
            func.apply(context, args);
            preTime = nowTime;
        }
    };
}

// 定时器实现
function throttle(func, wait) {
    let timeout;

    return function () {
        let context = this;
        let args = arguments;

        if (!timeout) {
            timeout = setTimeout(function () {
                timeout = null;
                func.apply(context, args);
            }, wait);
        }
    };
}